#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <openssl/md5.h>

#define SALT "!@520$Cloud*File-System"

bool make_token(char *user_id, char *token){
    MD5_CTX ctx;
    char hash_val[MD5_DIGEST_LENGTH] = "";  // 16位
    
    MD5_Init(&ctx);
    MD5_Update(&ctx, user_id, strlen(user_id));
    MD5_Update(&ctx, SALT, strlen(SALT));
    MD5_Final(hash_val, &ctx);

    for(int i=0;i<MD5_DIGEST_LENGTH;i++){
        sprintf(token+(i*2), "%02x", hash_val[i]);
    }
    return true;
}

// ./test_md5 <user_id>
int main(int argc, char const *argv[])
{
    if(argc != 2) return -1;
    // char *user_id = "abcdefgh12345678abcdefgh12345678";
    char token[33] = "";
    if(make_token((char *)argv[1], token))
        printf("token is %s(%ld)\n", token, strlen(token));

    return 0;
}
